/*
 *      ID : Xerxes
 *      PROG : 1071
 *      LANG : C++
 *
 *      2012-05-29 13:44:26
 *      "I have not failed, I have just found 10000 ways that won't work.
 */

#include <iostream>
#include <algorithm>
#include <vector>
#include <sstream>
#include <fstream>
#include <string>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <functional>
#include <bitset>
#include <iomanip>

#include <ctime>
#include <cassert>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <climits>
#include <cstdlib>

using namespace std;


#define foR(i1,st,ed) for(int i1 = st , j1 = ed ; i1 < j1 ; ++i1 )
#define fo(i1,ed) foR( i1 , 0 , ed )
#define foE(i1,st,ed) foR( i1, st, ed+1 )
#define foit(i, x) for (typeof((x).begin()) i = (x).begin(); i != (x).end(); i++)
#define bip system("pause")
#define Int long long
#define pb push_back
#define SZ(X) (int)(X).size()
#define LN(X) (int)(X).length()
#define mk make_pair
#define SET( ARRAY , VALUE ) memset( ARRAY , VALUE , sizeof(ARRAY) )
#define line putchar_unlocked('\n')

template<class T1>
inline void debug ( T1 _x ) {
    cout<<_x<<'\n';
}
template<class T1, class T2>
inline void debug ( T1 _x,T2 _y ) {
    cout<<_x<<' '<<_y<<'\n';
}
template<class T1, class T2, class T3>
inline void debug ( T1 _x,T2 _y,T3 _z ) {
    cout<<_x<<' '<<_y<<' '<<_z<<'\n';
}
template<class T1, class T2, class T3, class T4>
inline void debug ( T1 _x,T2 _y,T3 _z,T4 _zz ) {
    cout<<_x<<' '<<_y<<' '<<_z<<' '<<_zz<<'\n';
}
template< class T1>
inline void debug ( T1 _array,int _size ) {
    cout<<"[";
    for ( int i=0; i<_size; ++i ) {
        cout<<' '<<_array[i];
    }
    puts ( " ]" );
}

#define getchar getchar_unlocked
#define putchar putchar_unlocked

inline void fastRead(int *a) {
    register char c=0;
    while (c<33) c=getchar_unlocked();
    *a=0;
    while (c>33)
    {
        *a=*a*10+c-'0';
        c=getchar();
    }
}
inline void fastOut(int a,bool flag){
    if(a<=0){
        if(flag==true){
            putchar_unlocked('0');
        }
    }
    else{
        fastOut(a/10,false);
        putchar_unlocked( ( a%10 )+'0' );
    }
}

inline bool CI ( int &_x ) {
    return scanf ( "%d",&_x ) ==1;
}
inline bool CI ( int &_x, int &_y ) {
    return CI ( _x ) &&CI ( _y ) ;
}
inline bool CI ( int &_x, int &_y, int &_z ) {
    return CI ( _x ) &&CI ( _y ) &&CI ( _z ) ;
}
inline bool CI ( int &_x, int &_y, int &_z, int &_zz ) {
    return CI ( _x ) &&CI ( _y ) &&CI ( _z ) &&CI ( _zz ) ;
}
inline void wait ( double seconds ) {
    double endtime = clock() + ( seconds* CLOCKS_PER_SEC );
    while ( clock() < endtime ) {
        ;
    }
}
#define mx 105
int grid[mx][mx];
int R,C;
inline void Read() {
    CI ( R,C );
    foE ( i,1,R ) {
        foE ( j,1,C ) {
            fastRead(&grid[i][j]);
        }
    }
}

int dp[mx][mx][mx];
const int inf = ( int ) 1023456789;

int go ( int r1, int r2, int c1, int c2, int len ) {
    int &ret = dp[r1][r2][len];
    if ( ret!=-1 ) return ret;

    //debug ( r1,c1,r2,c2 );
    if ( c1<1||c2<1||r1>R||r2>R ) {
        return ret=-inf;
    }
    ret=-inf;
    if ( c1==C&&c2==C&&r1==R&&r2==R ) {
        return ret=grid[R][C];
    }
    if ( c1<1||c2<1||r1<1||r2<1&&c1>C||c2>C||r1>R||r2>R ) {
        return ret=-inf;
    }
    if ( !( r1==1&&r2==1&&c1==1&&c2==1 ) && ( r1==r2&&c1==c2 ) ) {
        return -inf;
    }
    int var=grid[r1][c1]+grid[r2][c2];
    if ( c1==1&&c2==1&&r1==1&&r2==1 ) var-=grid[r2][c2];

    int a=var+go ( r1,r2+1, c1+1,c2,len+1 );
    int b=var+go ( r1,r2,c1+1,c2+1,len+1 );
    int c=var+go ( r1+1,r2+1,c1,c2,len+1 );
    int d=var+go ( r1+1,r2,c1,c2+1,len+1 );
    ret=max(a,max(b, max(c,d) ));
    return ret;
}
inline void Proc() {
    SET ( dp,-1 );
    int var = go ( 1,1,1,1,1 );
    fastOut(var,true);   
    line;
}
int main() {
    int tt;
    fastRead ( &tt );
    foE ( i,1,tt ) {
        cout<<"Case "<<i<<": ";
        Read();
        Proc();
    }
    return 0;
}
// kate: indent-mode cstyle; space-indent on; indent-width 0;  replace-tabs on;


